<?php
/**
 * @author Mikhail Mangushev
 * @license New BSD License (http://www.opensource.org/licenses/bsd-license.php)
 * @link http://code.google.com/p/rucommercechecker/
 * @version 0.1
 * 
 * Статический класс для проверки валидности номеров: 
 * - ИНН
 * - страхового свидетельства ПФ
 * - ОКПО
 * - кор. счёта
 * - расчётного счёта
 * */

class PHPRuCommerceChecker {
	
	/**
	 * Проверка номера ИНН (Идентификационный номер налогоплательщика)
	 * @param $code integer
	 * @return boolean
	 */
	static public function inn($code) {
		if (strlen($code)!=10&&strlen($code)!=12) return false;
		else {
			$i = (string)$code;
			if (!preg_match('/^\d*$/',$i)) return false;
			if (strlen($i)==10) {
				$s = (2*$i{0}+4*$i{1}+10*$i{2}+3*$i{3}+5*$i{4}+9*$i{5}+4*$i{6}+6*$i{7}+8*$i{8})%11;
				if ($s==10) $s = 0;
				if ($s!=$i{9}) return false;
		    }
			if (strlen($i)==12) {
				$s = (7*$i{0}+2*$i{1}+4*$i{2}+10*$i{3}+3*$i{4}+5*$i{5}+9*$i{6}+4*$i{7}+6*$i{8}+8*$i{9})%11;
				if ($s==10) $s = 0;
				$s2 = (3*$i{0}+7*$i{1}+2*$i{2}+4*$i{3}+10*$i{4}+3*$i{5}+5*$i{6}+9*$i{7}+4*$i{8}+6*$i{9}+8*$i{10})%11;
				if ($s2==10) $s2 = 0;
				if ($s!=$i{10} || $s2!=$i{11}) return false;
			}
		}
		return true;
	}
	
	/**
	 * Проверка номера страхования свидетельства ПФ
	 * @param $code integer
	 * @return boolean
	 */
	static public function pf($code) {
		if (strlen($code)!=11) return false;
		else {
			$i = (string)$code;
			if (!preg_match('/^\d*$/',$i)) return false;
			$s = 0;
			for ($k=0;$k<9;$k++) {
				$s += $i{$k} * (9-$k);
			}
			$s = $s%101;
			$s2 = (9*$i{0}+8*$i{1}+7*$i{2}+6*$i{3}+5*$i{4}+4*$i{5}+3*$i{6}+2*$i{7}+1*$i{8});
			if ($i{9}.$i{10}!=$s) return false;
		}
		return true;
	}
	
	/**
	 * Проверка номера ОКПО (Общероссийский классификатор предприятий и организаций)
	 * @param $code integer
	 * @return boolean
	 */
	static public function okpo($code) {
		if (strlen($code)!=8) return false;
		else {
			$i = (string)$code;
			if (!preg_match('/^\d*$/',$i)) return false;
			$sum1 = 0;
			$sum2 = 0;
			for ($k=0;$k<7;$k++) {
				$sum1 += $i{$k} * ($k+1);
				$sum2 += $i{$k} * ($k+3);
			}
			$d = $sum1%11;
			if ($d>9) {
				$d = $sum2%11;
				if ($d==10) $d = 0;
			}
			if ($d!=$i{7}) return false;
		}
		return true;
	}
	
}
